#pragma once

typedef int MSGID;

enum eMsgTypes { MSG_NULL = 0, MSG_CREATE_TURRET, 
					MSG_CREATE_BULLET, MSG_DESTROY_TURRET,
					MSG_DESTROY_BULLET, MSG_MAX };
 
class CBaseMessage
{
private:
	MSGID	m_msgID;

public:
	CBaseMessage(MSGID msgID)
	{
		m_msgID = msgID;
	}

	virtual ~CBaseMessage(void) {}

	MSGID GetMsgID(void)	{ return m_msgID; }
};

class CCreateTurretMessage : public CBaseMessage
{
private:
	
public:
	CCreateTurretMessage();
	~CCreateTurretMessage();
};

class CTurret;

class CCreateBulletMessage : public CBaseMessage
{
private:
	CTurret* m_pTurret;
public:
	CCreateBulletMessage(CTurret* _pTurret);
	~CCreateBulletMessage();
	CTurret* GetTurret(){ return m_pTurret; }
};

class CDestroyTurretMessage : public CBaseMessage
{
private:
	CTurret* m_pTurret;
public:
	CDestroyTurretMessage(CTurret* _pTurret);
	~CDestroyTurretMessage();
	CTurret* GetTurret(){ return m_pTurret; }
};

class CBullet;

class CDestroyBulletMessage : public CBaseMessage
{
private:
	CBullet* m_pBullet;
public:
	CDestroyBulletMessage(CBullet* _pBullet);
	~CDestroyBulletMessage();
	CBullet* GetBullet(){ return m_pBullet; }
};